/**
 * 接口仅仅是trait (特质)的一个功能
 * 
 * rust的接口特质比java的接口更加灵活，体现在：
 * 1.由于实现的方式（可以和结构等不在一个文件），所以可以根据需要在任意地方定义并实现接口特质
 * 2.当然，这样可能会有一些重复定义的情况，或者是不好管理的问题。
 * 3.此外还存在一个问题：不同模块实现的不同特质是否不同？
 * //TODO:: 需要基于模块实现不同的特质，以便验证这种问题
 * 
 * 根据 trpl书籍的说法：不能为外部类型实现外部 trait  。孤儿规则？
 * 
 */
trait Summary {
    fn summarize(&self) -> String;
    fn get_content(&self) -> &String;
    fn is_empty(&self) -> bool {
        self.get_content().is_empty()
    }
}
struct Tweet {
    pub username: String,
    pub content: String,
    pub reply: bool,
    pub retweet: bool,
    pub time: String
}

impl Summary for Tweet {
    fn summarize(&self) -> String {
        format!("{}: {}  -- {}", self.username, self.content,self.time)
    }
    fn get_content(&self) -> &String {
        &self.content
    }
}

fn main(){
    let tweet = Tweet {
        username: String::from("勒布朗.詹姆斯"),
        content: String::from("我，要退网!"),
        reply: false,
        retweet: false,
        time: String::from("2024-11-21 05:01:01")
    };
    println!("{}", tweet.summarize());
}

